""" Módulo de python para obtener los links de un canal de Ok.ru a partir de un html
    Entrada: 1.- Nombre y ruta del archivo html.
             2.- Género de la serie.
             3.- Ruta donde están las listas. Opcional. Por defecto "Listas/"
    Devuelve: 3.- Archivo M3U en [ruta]/[género]/
"""

from bs4 import BeautifulSoup
from Serie import Serie
import sys

################################ Auxiliares ############################################################

##################### Conversión de duración ##########################

def conversor_duración(duración):
    lista = duración.split(sep=':')[::-1]
    segundos = 0
    if(len(lista) == 3):
        segundos = segundos + int(lista[2])*3600
    segundos = segundos + int(lista[1])*60
    segundos = segundos + int(lista[0])
    return segundos
        
###################### Escribir M3U ###################################

def generador_M3U(serie, ruta="Listas/"):
    f = open(ruta+serie.genero+'/'+serie.serie+'.m3u', 'w')
    f.write("#EXTM3U \n")
    for ep in serie.episodios:
        ds = conversor_duración(ep.duración)
        f.write(f"#EXTINF:{ds},{ep.título}\n")
        f.write(ep.link+'\n')
    f.close()


################################ Main ###############################################################

###################### Obtener datos del html ##########################

if __name__ == "__main__":

    # Abrir el archivo html
    with open(sys.argv[1]) as fp:
        bs = BeautifulSoup(fp, 'html.parser')

    if len(sys.argv) > 2:
        ruta = sys.argv[3]
    else:
        ruta = "Listas/"

    # Obtener nombre de la serie
    album_info_name = bs.find(class_="album-info_name textWrap")
    channel_panel_n = bs.find(class_="channel-panel_n ellip")
    if album_info_name is not None:
        serie = Serie(album_info_name.string, sys.argv[2])
    elif channel_panel_n is not None:
        serie = Serie(channel_panel_n.string, sys.argv[2])    
    else:
        serie_name = sys.argv[1].split('/')[1]
        serie = Serie(serie_name.split('.')[0], sys.argv[2])
  
    #Obtener las tarjetas de video
    video_cards = bs.find_all(class_='video-card js-movie-card')

    for video_card in video_cards:

        #Obtener el enlace al epidodio
        link = f"https://ok.ru/video/{video_card['data-id']}"

        #Obtener la duración del episodio

        tag_duración = video_card.find(class_='video-card_duration')
        if( tag_duración is not None):
            duración = tag_duración.string
        else:
            duración = '00:00'

        #Obtener el tpitulo del episodio
        título = video_card.find(class_='video-card_n-w').a.string

        serie.agregar_episodio(título, duración, link)

    serie.info()
    generador_M3U(serie, ruta)
